home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / ddj9304.zip / WAVELET.ZIP / DECOMP.L_C < prev    next >
Text File  |  1992-02-04  |  5KB  |  90 lines

  1.  
  2. Creation date: Tue Feb 04 16:42:50 1992    decomp.s    page 1
  3.  
  4.  
  5. Address    Instruction    Line #    Source line
  6.             1    #include "dsp_type.h"
  7.             1    #define DSP32C 1
  8.             4    #endif
  9.             5    
  10.             6    .global DECOMP
  11.             7            /*  DECOMP
  12.             8                perform recursive decomposition on non-terminating data sequence
  13.             9                registers used: r1 r2 r3 r4 r5 r6 r11 r12 r13 r14 r15 r16
  14.             10                accumulators used: a0 a1
  15.             11    
  16.             12                input: r1 - pointer to wavelet high-pass filter coefficients
  17.             13                       r2 - pointer to wavelet low-pass filter coefficients
  18.             14                       r6 - pointer to wavelet output data list
  19.             15                       r11 - jump address for proper filter length
  20.             16                       r12 - pointer to data pointer array
  21.             17                       r13 - pointer to stack
  22.             18                       r14 - return stack register, i.e. "TOP OF STACK"
  23.             19                       r15 - recursion counter
  24.             20                       r16 - filter coefficient pointer wrap back index
  25.             21            */
  26. 0000    1ee30197    22    DECOMP:   r3e = *r12++; /* load pointer to approx. input array source */
  27. 0004    1ee50190    23              r5e = *r12;   /* load pointer to approx. output array destination */
  28. 0008    a00b0000    24              goto r11;     /* jump to appropriate filter processing for length */
  29. 000c    94830008    25              r4e = r3 + 8; /* set pointer to approx. input array destination */
  30. 0010    6003cf87    26    DT6:      a0 = a0 + *r3++ * *r1++; /* pass data through high-pass wavelet */
  31. 0014    6003cf87    27              a0 = a0 + *r3++ * *r1++; /* filter (a0 = 0.0 initially) */
  32. 0018    6003cf87    28    DT4:      a0 = a0 + *r3++ * *r1++; /* the destination of the jump depends */
  33. 001c    6003cf87    29              a0 = a0 + *r3++ * *r1++; /* upon the length of the wavelet */
  34. 0020    6003cf87    30    DT2:      a0 = a0 + *r3++ * *r1++; /* filter */
  35. 0024    a00b001c    31              goto r11 + 28; /* jump to appropriate filter processing for length */
  36. 0028    60028d37    32              *r6++ = a0 = a0 + *r3++r16 * *r1++r16; /* output is detail point */
  37. 002c    4425cfa7    33    AT6:      a1 = a1 + (*r4++ = *r3++) * *r2++; /* pass data through low-pass */
  38. 0030    4425cfa7    34              a1 = a1 + (*r4++ = *r3++) * *r2++; /* filter (a1 = 0.0 initially) */
  39. 0034    4425cfa7    35    AT4:      a1 = a1 + (*r4++ = *r3++) * *r2++;
  40. 0038    4425cfa7    36              a1 = a1 + (*r4++ = *r3++) * *r2++;
  41. 003c    6425cf87    37    AT2:      a1 = a1 + *r3++ * *r2++;
  42. 0040    64248f87    38              a1 = a1 + *r3++ * *r2++r16;
  43. 0044    189102e0    39              r15 = r15 - 1;         /* check the recursion count */
  44. 0048    00a00084    40              if (eq) goto NO_RECUR; /* if true, recursion at bottom of tree */
  45. 004c    9be50004    41              r5e & 0x0004;          /* check for even/odd status */
  46. 0050    302000ae    42              *r5-- = a1 = a1;       /* save approx. data for next level */
  47. 0054    00800088    43              if (ne) goto CLEAN_UP; /* if true, await another data point */
  48. 0058    94850008    44              r4e = r5 + 8;          /* wrap output pointer back */
  49. 005c    1fe40197    45              *r12++ = r4e;          /* save wrapped pointer to approx. O/P */
  50. 0060    1fee01b6    46              *r13-- = r14e;         /* save return address to stack */
  51. 0064    34800007    47              a0 = a0 - a0;          /* clear the accumulators */
  52. 0068    e00e0000    48              call DECOMP (r14);     /* recurse down the tree */
  53. 006c    30200007    49              a1 = a0;
  54.             50    #if DSP32C
  55. 0070    95ad0004    51              r13e = r13 + 4;        /* align stack pointer to return address */
  56.             54    #endif
  57. 0074    1eee01b0    55              r14e = *r13;           /* pop the return address */
  58. 0078    00000000    56              nop;
  59. 007c    002e0000    57              return (r14);
  60. 0080    00000000    58              nop;
  61.             59    
  62. 0084    302000b0    60    NO_RECUR: *r6 = a1 = a1;         /* save approx. coeff. as next value */
  63. 0088    002e0000    61    CLEAN_UP: return (r14);
  64. 008c    1fe50197    62              *r12++ = r5e;          /* save unwrapped pointer to approx. output */
  65.             63            /* END OF DECOMP */
  66.  
  67.  
  68. Creation date: Tue Feb 04 16:42:51 199    decomp.s    page 2
  69.  
  70.  
  71.  
  72. d3as:warning:decomp.s line 32: branch dest can't start with CAU reg store inst
  73. d3as:warning:decomp.s line 32: Use output pointer reg only as output pointer in
  74.          DAU inst at dest after branch instruction
  75.  
  76.  
  77.  
  78. Symbol Table
  79. .file    decomp.s
  80. .bank0    (section 1)    size 0x90
  81. DT2    section 1    defined    value 0x20
  82. DT4    section 1    defined    value 0x18
  83. DT6    section 1    defined    value 0x10
  84. DECOMP    section 1    global    defined    value 0x0
  85. AT2    section 1    defined    value 0x3c
  86. AT4    section 1    defined    value 0x34
  87. AT6    section 1    defined    value 0x2c
  88. CLEAN_UP    section 1    defined    value 0x88
  89. NO_RECUR    section 1    defined    value 0x84
  90.